package com.inspire.springboot.service.imp;

import com.Zoa;
import com.inspire.springboot.sabi.array.ZoaArrays;
import com.inspire.springboot.service.PerforTesting;

/**
 * @author ：inspire
 * @date ：Created in 2023/4/19 9:34
 * @description：
 * @modified By：inspire
 * @version:
 */
public class PerforTestingArrayImpl implements PerforTesting {
    static int userNum_V=20;//设置的值
    static int userNum=userNum_V+1;//实际的值

    static {
        ZoaArrays.load();
    }

    @Override
    public void test() {

        for(int times=0;times<10;times++){//每个用户发10次 DD总数据量是10w/用户/次 共2100w; Cond总数据量是10w*2=20w/用户/次 共4200w 2.7s
            for(int i=userNum-1;i>=0;i--){//int i=0;i<userNum;i++
                for(int j=0;j<100000;j++){//10w个不同块
                    ZoaArrays.ZOADATA_15285039_70[Zoa.getTraceId()].incrementAndGet(j);
                }
                for(int j=0;j<100000;j++){
                    sendCondDD(j);
                }
            }
        }
    }

    /*
    验证没有桩点时业务执行时
     */
    @Override
    public void test2() {
        for(int times=0;times<10;times++){//每个用户发10次 16.1w*10=161w（共3220w） 16.1w*2*10=322w（共6440w）
            for(int i=1;i<userNum;i++){
                for(int j=0;j<100000;j++){//10w
//                    ZoaArrays.ZOADATA_15285039_70[Zoa.getTraceId()].incrementAndGet(j);
                    if(j%2==0){//5w
//                        ZoaArrays.ZOADATA_15285039_70[Zoa.getTraceId()].incrementAndGet(j);
                    }
                    if(j%10==0){//1w
//                        ZoaArrays.ZOADATA_15285039_70[Zoa.getTraceId()].incrementAndGet(j);
                    }
                    if(j%100==0){//0.1w
//                        ZoaArrays.ZOADATA_15285039_70[Zoa.getTraceId()].incrementAndGet(j);
                    }
                }
                for(int j=0;j<100000;j++){//10w
//                    sendCondDD(j);

                    if(j%2==0){//5w
//                        sendCondDD(j);
                    }
                    if(j%10==0){//1w
//                        sendCondDD(j);
                    }
                    if(j%100==0){//0.1w
//                        sendCondDD(j);
                    }
                }
            }
        }
    }

    @Override
    public void indexDef() {
        //用zoaDefault用户去统计（teststars=zoaDefault）
        for(int times=0;times<10;times++){//每个用户发10次 DD总数据量是16.1w*10=161w（共3220w） Cond总数据量是16.1w*2*10=322w（共6440w） 3859ms
            for(int i=1;i<userNum;i++){
                for(int j=0;j<100000;j++){//10w
                    ZoaArrays.ZOADATA_15285039_70[Zoa.getTraceId()].incrementAndGet(j);
                    if(j%2==0){//5w
                        ZoaArrays.ZOADATA_15285039_70[Zoa.getTraceId()].incrementAndGet(j);
                    }
                    if(j%10==0){//1w
                        ZoaArrays.ZOADATA_15285039_70[Zoa.getTraceId()].incrementAndGet(j);
                    }
                    if(j%100==0){//0.1w
                        ZoaArrays.ZOADATA_15285039_70[Zoa.getTraceId()].incrementAndGet(j);
                    }
                }
                for(int j=0;j<100000;j++){//10w
                    sendCondDD(j);

                    if(j%2==0){//5w
                        sendCondDD(j);
                    }
                    if(j%10==0){//1w
                        sendCondDD(j);
                    }
                    if(j%100==0){//0.1w
                        sendCondDD(j);
                    }
                }
            }
        }
    }

    @Override
    public void indexDef2() {
        for(int times=0;times<10;times++){//一个用户发10次 DD总数据量是16.1w*10=161w Cond总数据量是16.1w*2*10=322w 182ms
            for(int j=0;j<100000;j++){//10w
                ZoaArrays.ZOADATA_15285039_70[Zoa.getTraceId()].incrementAndGet(j);
                if(j%2==0){//5w
                    ZoaArrays.ZOADATA_15285039_70[Zoa.getTraceId()].incrementAndGet(j);
                }
                if(j%10==0){//1w
                    ZoaArrays.ZOADATA_15285039_70[Zoa.getTraceId()].incrementAndGet(j);
                }
                if(j%100==0){//0.1w
                    ZoaArrays.ZOADATA_15285039_70[Zoa.getTraceId()].incrementAndGet(j);
                }
            }
            for(int j=0;j<100000;j++){//10w
                sendCondDD(j);

                if(j%2==0){//5w
                    sendCondDD(j);
                }
                if(j%10==0){//1w
                    sendCondDD(j);
                }
                if(j%100==0){//0.1w
                    sendCondDD(j);
                }
            }
        }
    }

    public void sendCondDD(int j){
        ZoaArrays.ZOACONDPRE_15285039_70[Zoa.getTraceId()][0].set(j,2);
        ZoaArrays.ZOACONDPRE_15285039_70[Zoa.getTraceId()][1].set(j,1);
        ZoaArrays.ZOACONDPRE_15285039_70[Zoa.getTraceId()][2].incrementAndGet(j);

        ZoaArrays.ZOACONDAFT_15285039_70[Zoa.getTraceId()][0].set(j,1);
        ZoaArrays.ZOACONDAFT_15285039_70[Zoa.getTraceId()][1].set(j,1);
        ZoaArrays.ZOACONDAFT_15285039_70[Zoa.getTraceId()][2].incrementAndGet(j);
    }
}
